<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <title>标题</title>
</head>

<body>
    <script>
        /*  
            区别：
            1. 每个值 += 和前一个值相加的结果
            2. num[i] - min得到index，array[index] - 1得到value，result[value]赋值为num[i]
        */
        function sortArray(nums) {
            // 1. 求最大值和最小值的差 就是新创建的数组的长度 + 1
            let max = nums[0]
            let min = nums[0]
            let result = []
            for (let i = 1; i < nums.length; i++) {
                if (nums[i] > max) {
                    max = nums[i]
                } else if (nums[i] < min) {
                    min = nums[i]
                }
            }
            // 2. 计算范围并初始化计数数组
            let sub = max - min 
            let array = new Array(sub + 2).fill(0)
            // 3. 填充计数数组
            for (let j = 0; j < nums.length; j++) {
                array[nums[j] - min]++ 
            }
            // 4. 计算累计的频率
            for (let j = 1; j < array.length; j++) {
                // 计算每个元素的最终位置
                array[j] += array[j - 1]
            }
            console.log(array);
            // 5. 根据计数数组生成排序结果
            for (let i = nums.length - 1; i >= 0; i--) {
                // 比如99 - 90就是9，array[9]是5，-1后就是4，99应该放在结果数组索引为4的位置
                let index = nums[i] - min
                let value = array[index] - 1
                // 将数组放入结果数组的正确位置
                result[value] = nums[i] 
                // 更新计数
                array[index]--
            }
            return result
        }
        console.log(sortArray([94, 90, 95, 95, 99]));
    </script>
</body>

</html>